LookerとAlteryxを連携させてノンコードで機械学習をやってみた #looker
当エントリは2019年アドベントカレンダー『Looker Advent Calendar 2019』の22日目のエントリとなります。
どうも。大阪オフィスの玉井です。
弊社は12月20日をもって既に営業は終了しており、本日は冬季休業中です。…しかし、自分はまだこのアドベントカレンダーを終えてないからこうやってブログを書いています!!!!あああああああ!!!!!
Lookerは、その豊富なAPIを利用して、下記のようなデータサイエンスワークフローを提唱しています。
Lookerで定義されたデータをAPI経由でとってこれるので、それをPython等から直接行うことで、Looker上のデータに対して機械学習ができる…ということです。しかも結果をDBに入れてしまえば、その結果すらLookerで可視化できる…素晴らしい連携ですよね。
しかし、これを行うためにはある壁が立ちはだかります。それはコードの壁です。機械学習側はあくまでPythonやRといった言語で記述する必要があります。「いやいや、機械学習なんだから当然でしょ」って感じはありますが、事業会社の組織によっては、こういったことができる人材の育成なんてする余裕がありませんし、採用しようにも、それに対するコストを出す余裕もない…どうすればいいんだ状態になっていることがあります。
ここは発想の転換をしてみます。「APIをコールできて」「機械学習ができる」「コードは書かなくて良い」ツールがあれば、そのツールで代替できるのではないかと。そんな都合のいいツールなんてあるかー!!と叫びたくなるところですが、あります。Alteryxです。
ということで、今回はLookerとAlteryxを連携させてみたって内容のエントリをお送ります。
実施する内容
- 使用するデータはiris
- 機械学習ではお馴染み
- 各特徴量からアヤメの品種を分類する機械学習モデルを作成する
やってみることは、機械学習の世界では腐るほど行われていることですが、LookerとAlteryxの2ツールを連携させて、ノンコードで実施するというのは、国外含めて事例は(現時点では)ほとんど無いと思われます。
やってみる
作業環境
- Looker 6.24
- Windows 10 pro
- Alteryx Designer 2019.4
- Google Chrome 79.0.3945.88
- Amazon RDS for PostgreSQL
DBにirisデータを入れておく
下記よりirisデータを入手し、データベースに入れます。
今回はRDS(Postgres)に入れました。
LookerにDBをConnectionとして登録する
上記RDSをLookerに登録します。
Looker側でAPIの準備をする
下記を参考にLookerのAPIを有効にしておきます(コールすればレスポンスが返ってくる状態にしておく)。
APIを通して呼び出すデータをLookとして作成する
今回機械学習にかけたいデータを取得するためのLookを作成します。先程登録したConnectionを使って、Projectを作成し、そこからExploreでLookを作成します。
今回やりたいのはirisデータの分類ですので、分類したいラベルデータと、分類するための特徴量にあたる4カラムを使ったテーブル表を作ります(もっと簡単にいうと、結局irisデータの全カラムを使うだけなのですが、一応ちゃんとした言い方にしました)。
Alteryx DesignerでAPIを叩く
データを取得するためのLookを用意したところで、いよいよこのLook上のデータを、Alteryxから直接読み込みたいと思います。
ワークフロー全体
下記のようになりました。
処理を大きく分けると下記の通りです。
アクセストークンを取得する
Looker APIを叩くためには、まずアクセストークンが必要ですので、それを取得します。
まず、テキスト入力ツールでURL、クライアントID、クライアントシークレットを入力します。
続くダウンロードツールで、下記のように設定します。クライアントIDとシークレットをURLへPOSTし、トークンをもらいます。
後はJSONパースツールとクロスタブツールでデータを整えます
Lookからデータを取得する
アクセストークンを取得できるようにしたので、それを利用しつつ、先程作成したLookからデータを取得します。といっても、やることはアクセストークンの時とほとんど変わりません。
テキスト入力ツールでURLを指定します。LookのIDは、WebブラウザでLookを閲覧したときのURLからわかります。
そして、フィールド付加ツールで先程のアクセストークン(のカラム)を付けつつ、ダウンロードツールでURLに対してGETをかけるだけです。
JSONパースやクロスタブ等で整形して、キレイにデータを取得することができました。
機械学習(今回はSVM)を行う
データの取得と整形が終われば、後は機械学習を実施します。今回はサポートベクターマシンをやります(SVMの説明は本エントリでは行いません)。
目的変数はspecies、他の4カラムを説明変数に指定し、SVMを実行します。
正常なSVMモデルを作成することができました。続いてこのモデルをテスト用データに使用します。その際、Model Comparisonツールを使用しています。
実行すると、下記のテスト結果を出力することができました。
モデルのテスト結果を可視化
機械学習はこういった精度を見つつ、何度もモデルの作成やテストを繰り返します。モデルの変更やデータ前処理のやり直しも往々にしてあります。そういった場合、少しでもモデルの精度等に関する値を楽に見ることができれば、作業全体も少しはスムーズに進みます。
今回使用したModel Comparisonツールは、若干ではありますが、テストしたモデルの正解率等をデータとして出力できます。ですので、そのデータをそのままDBに出力し、そのデータをLookerで可視化します。
Model Comparisonツールからデータをとってきて、DBにロードします。
ロードしたデータをLookerで読み込んで可視化します(方法は色々ありますが、自分は別途そのテーブル専用のProjectを作成→LookML生成→Look(Explore)作成→ダッシュボード作成という流れでやりました)。
各値の説明や、機械学習自体については、手前味噌ですが下記をどうぞ。
LookerとAlteryxを組み合わせるといいこと
コードを書かずに機械学習フローを回すことができる
最大のメリットではないでしょうか。繰り返しになりますが、Python等を扱える人材の育成や採用は非常にコストがかかります。そこをツールの使い方を学ぶだけで済むので、今まで機械学習を業務に使用することを諦めていた方も、チャレンジする価値はあると思います。
機械学習の核となる部分以外はLookerでカバーできる
今回使用したデータは非常に綺麗なデータでしたが、実際業務で使用しているDBの中身は、複雑怪奇な構造になっていることがほとんどです。そこをLookerのLookMLで必要なものだけにしっかり定義してあげることで、Alteryx側は余計なことを考えずに、必要なデータだけを的確に取得することができます。
また、今回はモデルのテスト結果を可視化しましたが、それ以外にも、機械学習を行う前にデータの性質を確かめるために色々とデータを概観するときも、Lookerが役に立つと思います。
定期実行も簡単
別途Alteryx Serverの導入は必要ですが、Alteryx Serverに今回のようなフローをあげておくことで、機械学習を簡単に定期実行できるようにもできます。DB側にデータがどんどん増えるようになっている場合、ワークフローをちゃんと組んでおくことで、常に最新のデータを組み込んだ学習が自動でできるようになります。
LookerとAlteryxで機械学習をやる時のデメリット
やれることがAlteryxに縛られる
Alteryxで実行できるモデルは限られているため、Alteryxにないものはできません(Alteryxの中で、PythonやRを書ける機能がありますが、それをするくらいなら直接コードからLooker APIを叩いた方がよいです)。
モデルの精度等で出力できるものが少ない
今回、モデルの結果を一部Lookerで可視化しましたが、実際Alteryxから(データとして)出力できるものは限られています(Alteryxの中だけでしか見られないレポートが多い)。個人的には混同行列とかも出して、Lookerで可視化したいところでした(もしかしたら出力する方法があるかもしれないので、また調査したいと思います)。
定期実行する時のコスト
さっき「定期実行は簡単」って言っておいてアレなのですが、これだけのためにAlteryx Serverを導入するのは、組織によってはなかなか高コストだと思われます。
おわりに
Lookerは他のBIツールより、他システムとの連携に優れていると思います。あらゆるツールを連携させて、最強のデータプラットフォームを構築してみませんか。